<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Flow: flow::log::Log_context Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">Flow<span id="projectnumber">&#160;2.0.0</span>
   </div>
   <div id="projectbrief">Flow project: Full implementation reference.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespaceflow.html">flow</a></li><li class="navelem"><a class="el" href="namespaceflow_1_1log.html">log</a></li><li class="navelem"><a class="el" href="classflow_1_1log_1_1Log__context.html">Log_context</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pri-attribs">Private Attributes</a> &#124;
<a href="classflow_1_1log_1_1Log__context-members.html">List of all members</a>  </div>
  <div class="headertitle"><div class="title">flow::log::Log_context Class Reference</div></div>
</div><!--header-->
<div class="contents">

<p>Convenience class that simply stores a <a class="el" href="classflow_1_1log_1_1Logger.html" title="Interface that the user should implement, passing the implementing Logger into logging classes (Flow&#39;...">Logger</a> and/or <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a> passed into a constructor; and returns this <a class="el" href="classflow_1_1log_1_1Logger.html" title="Interface that the user should implement, passing the implementing Logger into logging classes (Flow&#39;...">Logger</a> and <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a> via <a class="el" href="classflow_1_1log_1_1Log__context.html#af4db395042b065b00398cd59845dcb4d" title="Returns the stored Logger pointer, particularly as many FLOW_LOG_*() macros expect.">get_logger()</a> and <a class="el" href="classflow_1_1log_1_1Log__context.html#a8a5fef42dc2cedf3c0d1a6e83beb2948" title="Returns reference to the stored Component object, particularly as many FLOW_LOG_*() macros expect.">get_log_component()</a> public accessors.  
 <a href="classflow_1_1log_1_1Log__context.html#details">More...</a></p>

<p><code>#include &lt;<a class="el" href="log_8hpp_source.html">log.hpp</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for flow::log::Log_context:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1log_1_1Log__context__inherit__graph.svg" width="652" height="1528"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for flow::log::Log_context:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1log_1_1Log__context__coll__graph.svg" width="1134" height="308"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:ae7100d2dd130d8f130e3e64fdb1f4fd9"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1log_1_1Log__context.html#ae7100d2dd130d8f130e3e64fdb1f4fd9">Log_context</a> (<a class="el" href="classflow_1_1log_1_1Logger.html">Logger</a> *logger=0)</td></tr>
<tr class="memdesc:ae7100d2dd130d8f130e3e64fdb1f4fd9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs <a class="el" href="classflow_1_1log_1_1Log__context.html" title="Convenience class that simply stores a Logger and/or Component passed into a constructor; and returns...">Log_context</a> by storing the given pointer to a <a class="el" href="classflow_1_1log_1_1Logger.html" title="Interface that the user should implement, passing the implementing Logger into logging classes (Flow&#39;...">Logger</a> and a null <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a>.  <a href="classflow_1_1log_1_1Log__context.html#ae7100d2dd130d8f130e3e64fdb1f4fd9">More...</a><br /></td></tr>
<tr class="separator:ae7100d2dd130d8f130e3e64fdb1f4fd9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af1ac7f30ab442c3c6aa6079335df6c9a"><td class="memTemplParams" colspan="2">template&lt;typename Component_payload &gt; </td></tr>
<tr class="memitem:af1ac7f30ab442c3c6aa6079335df6c9a"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classflow_1_1log_1_1Log__context.html#af1ac7f30ab442c3c6aa6079335df6c9a">Log_context</a> (<a class="el" href="classflow_1_1log_1_1Logger.html">Logger</a> *logger, Component_payload component_payload)</td></tr>
<tr class="memdesc:af1ac7f30ab442c3c6aa6079335df6c9a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs <a class="el" href="classflow_1_1log_1_1Log__context.html" title="Convenience class that simply stores a Logger and/or Component passed into a constructor; and returns...">Log_context</a> by storing the given pointer to a <a class="el" href="classflow_1_1log_1_1Logger.html" title="Interface that the user should implement, passing the implementing Logger into logging classes (Flow&#39;...">Logger</a> and a new <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a> storing the specified generically typed payload (an <code>enum</code> value).  <a href="classflow_1_1log_1_1Log__context.html#af1ac7f30ab442c3c6aa6079335df6c9a">More...</a><br /></td></tr>
<tr class="separator:af1ac7f30ab442c3c6aa6079335df6c9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5c57a7f44959a01ca9a1c948a6686cc0"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1log_1_1Log__context.html#a5c57a7f44959a01ca9a1c948a6686cc0">Log_context</a> (const <a class="el" href="classflow_1_1log_1_1Log__context.html">Log_context</a> &amp;src)</td></tr>
<tr class="memdesc:a5c57a7f44959a01ca9a1c948a6686cc0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy constructor that stores equal <code>Logger*</code> and <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a> values as the source.  <a href="classflow_1_1log_1_1Log__context.html#a5c57a7f44959a01ca9a1c948a6686cc0">More...</a><br /></td></tr>
<tr class="separator:a5c57a7f44959a01ca9a1c948a6686cc0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3d4e624833d96bdafa1485ffff472509"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1log_1_1Log__context.html#a3d4e624833d96bdafa1485ffff472509">Log_context</a> (<a class="el" href="classflow_1_1log_1_1Log__context.html">Log_context</a> &amp;&amp;src)</td></tr>
<tr class="memdesc:a3d4e624833d96bdafa1485ffff472509"><td class="mdescLeft">&#160;</td><td class="mdescRight">Move constructor that makes this equal to <code>src</code>, while the latter becomes as-if default-constructed.  <a href="classflow_1_1log_1_1Log__context.html#a3d4e624833d96bdafa1485ffff472509">More...</a><br /></td></tr>
<tr class="separator:a3d4e624833d96bdafa1485ffff472509"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5d628315d5a93908d47a281980d3113e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1log_1_1Log__context.html">Log_context</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1log_1_1Log__context.html#a5d628315d5a93908d47a281980d3113e">operator=</a> (const <a class="el" href="classflow_1_1log_1_1Log__context.html">Log_context</a> &amp;src)</td></tr>
<tr class="memdesc:a5d628315d5a93908d47a281980d3113e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assignment operator that behaves similarly to the copy constructor.  <a href="classflow_1_1log_1_1Log__context.html#a5d628315d5a93908d47a281980d3113e">More...</a><br /></td></tr>
<tr class="separator:a5d628315d5a93908d47a281980d3113e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aae857197aecba8606c32296bc7bec308"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1log_1_1Log__context.html">Log_context</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1log_1_1Log__context.html#aae857197aecba8606c32296bc7bec308">operator=</a> (<a class="el" href="classflow_1_1log_1_1Log__context.html">Log_context</a> &amp;&amp;src)</td></tr>
<tr class="memdesc:aae857197aecba8606c32296bc7bec308"><td class="mdescLeft">&#160;</td><td class="mdescRight">Move assignment operator that behaves similarly to the move constructor.  <a href="classflow_1_1log_1_1Log__context.html#aae857197aecba8606c32296bc7bec308">More...</a><br /></td></tr>
<tr class="separator:aae857197aecba8606c32296bc7bec308"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa6bb8e4250586425631ef80063caf155"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1log_1_1Log__context.html#aa6bb8e4250586425631ef80063caf155">swap</a> (<a class="el" href="classflow_1_1log_1_1Log__context.html">Log_context</a> &amp;other)</td></tr>
<tr class="memdesc:aa6bb8e4250586425631ef80063caf155"><td class="mdescLeft">&#160;</td><td class="mdescRight">Swaps <a class="el" href="classflow_1_1log_1_1Logger.html" title="Interface that the user should implement, passing the implementing Logger into logging classes (Flow&#39;...">Logger</a> pointers and <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a> objects held by <code>*this</code> and <code>other</code>.  <a href="classflow_1_1log_1_1Log__context.html#aa6bb8e4250586425631ef80063caf155">More...</a><br /></td></tr>
<tr class="separator:aa6bb8e4250586425631ef80063caf155"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af4db395042b065b00398cd59845dcb4d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1log_1_1Logger.html">Logger</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1log_1_1Log__context.html#af4db395042b065b00398cd59845dcb4d">get_logger</a> () const</td></tr>
<tr class="memdesc:af4db395042b065b00398cd59845dcb4d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the stored <a class="el" href="classflow_1_1log_1_1Logger.html" title="Interface that the user should implement, passing the implementing Logger into logging classes (Flow&#39;...">Logger</a> pointer, particularly as many <code>FLOW_LOG_*()</code> macros expect.  <a href="classflow_1_1log_1_1Log__context.html#af4db395042b065b00398cd59845dcb4d">More...</a><br /></td></tr>
<tr class="separator:af4db395042b065b00398cd59845dcb4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8a5fef42dc2cedf3c0d1a6e83beb2948"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classflow_1_1log_1_1Component.html">Component</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1log_1_1Log__context.html#a8a5fef42dc2cedf3c0d1a6e83beb2948">get_log_component</a> () const</td></tr>
<tr class="memdesc:a8a5fef42dc2cedf3c0d1a6e83beb2948"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns reference to the stored <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a> object, particularly as many <code>FLOW_LOG_*()</code> macros expect.  <a href="classflow_1_1log_1_1Log__context.html#a8a5fef42dc2cedf3c0d1a6e83beb2948">More...</a><br /></td></tr>
<tr class="separator:a8a5fef42dc2cedf3c0d1a6e83beb2948"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-attribs" name="pri-attribs"></a>
Private Attributes</h2></td></tr>
<tr class="memitem:af13297446a54d6d80eb33d8fc672c10f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1log_1_1Logger.html">Logger</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1log_1_1Log__context.html#af13297446a54d6d80eb33d8fc672c10f">m_logger</a></td></tr>
<tr class="memdesc:af13297446a54d6d80eb33d8fc672c10f"><td class="mdescLeft">&#160;</td><td class="mdescRight">The held <a class="el" href="classflow_1_1log_1_1Logger.html" title="Interface that the user should implement, passing the implementing Logger into logging classes (Flow&#39;...">Logger</a> pointer. Making the pointer itself non-<code>const</code> to allow <code><a class="el" href="classflow_1_1log_1_1Log__context.html#a5d628315d5a93908d47a281980d3113e" title="Assignment operator that behaves similarly to the copy constructor.">operator=()</a></code> to work.  <a href="classflow_1_1log_1_1Log__context.html#af13297446a54d6d80eb33d8fc672c10f">More...</a><br /></td></tr>
<tr class="separator:af13297446a54d6d80eb33d8fc672c10f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acf51230f139ac6f17748a02111b04086"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1log_1_1Component.html">Component</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1log_1_1Log__context.html#acf51230f139ac6f17748a02111b04086">m_component</a></td></tr>
<tr class="memdesc:acf51230f139ac6f17748a02111b04086"><td class="mdescLeft">&#160;</td><td class="mdescRight">The held <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a> object. Making the object non-<code>const</code> to allow <code><a class="el" href="classflow_1_1log_1_1Log__context.html#a5d628315d5a93908d47a281980d3113e" title="Assignment operator that behaves similarly to the copy constructor.">operator=()</a></code> to work.  <a href="classflow_1_1log_1_1Log__context.html#acf51230f139ac6f17748a02111b04086">More...</a><br /></td></tr>
<tr class="separator:acf51230f139ac6f17748a02111b04086"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >Convenience class that simply stores a <a class="el" href="classflow_1_1log_1_1Logger.html" title="Interface that the user should implement, passing the implementing Logger into logging classes (Flow&#39;...">Logger</a> and/or <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a> passed into a constructor; and returns this <a class="el" href="classflow_1_1log_1_1Logger.html" title="Interface that the user should implement, passing the implementing Logger into logging classes (Flow&#39;...">Logger</a> and <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a> via <a class="el" href="classflow_1_1log_1_1Log__context.html#af4db395042b065b00398cd59845dcb4d" title="Returns the stored Logger pointer, particularly as many FLOW_LOG_*() macros expect.">get_logger()</a> and <a class="el" href="classflow_1_1log_1_1Log__context.html#a8a5fef42dc2cedf3c0d1a6e83beb2948" title="Returns reference to the stored Component object, particularly as many FLOW_LOG_*() macros expect.">get_log_component()</a> public accessors. </p>
<p >It's extremely useful (almost mandatory in conventional practice) for classes that want to log, as they can simply derive from it (passing in the desired <code>Logger*</code> and <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a> payload (an <code>enum</code> value) into the <a class="el" href="classflow_1_1log_1_1Log__context.html" title="Convenience class that simply stores a Logger and/or Component passed into a constructor; and returns...">Log_context</a> superclass constructor), at which point the <a class="el" href="classflow_1_1log_1_1Log__context.html#af4db395042b065b00398cd59845dcb4d" title="Returns the stored Logger pointer, particularly as many FLOW_LOG_*() macros expect.">get_logger()</a> and <a class="el" href="classflow_1_1log_1_1Log__context.html#a8a5fef42dc2cedf3c0d1a6e83beb2948" title="Returns reference to the stored Component object, particularly as many FLOW_LOG_*() macros expect.">get_log_component()</a> functions the <code>FLOW_LOG_...()</code> macros expect automatically become available without any additional code having to be written in the logging class. Here is how:</p>
<div class="fragment"><div class="line"><span class="keyword">class </span>I_like_to_have_fun_and_log_about_it :</div>
<div class="line">  <span class="keyword">public</span> <a class="code hl_class" href="classflow_1_1log_1_1Log__context.html">flow::log::Log_context</a></div>
<div class="line">{</div>
<div class="line"><span class="keyword">public</span>:</div>
<div class="line">  I_like_to_have_fun_and_log_about_it() :</div>
<div class="line">    <span class="comment">// Glue FLOW_LOG_*() macros to the following simple logger and component FUN_HAVER.</span></div>
<div class="line">    <a class="code hl_class" href="classflow_1_1log_1_1Log__context.html">Log_context</a>(&amp;<a class="code hl_variable" href="classflow_1_1log_1_1Log__context.html#af13297446a54d6d80eb33d8fc672c10f">m_logger</a>, My_cool_components::S_FUN_HAVER),</div>
<div class="line">    <span class="comment">// Initialize stdout logger that logs INFO-or-higher-severity messages.</span></div>
<div class="line">    <a class="code hl_variable" href="classflow_1_1log_1_1Log__context.html#af13297446a54d6d80eb33d8fc672c10f">m_logger</a>(true, std::cout, std::cout, <a class="code hl_namespace" href="namespaceflow.html">flow</a>::log::<a class="code hl_enumeration" href="namespaceflow_1_1log.html#a5c602384e6fe9d7642740ac2fae4ad04">Sev</a>::<a class="code hl_enumvalue" href="namespaceflow_1_1log.html#a5c602384e6fe9d7642740ac2fae4ad04ac238793326fae17afcc849e96b96e8e7">S_INFO</a>),</div>
<div class="line">    <span class="comment">// ... other initializers and superclass constructors, if any ...</span></div>
<div class="line">  {</div>
<div class="line">    <a class="code hl_define" href="log_8hpp.html#a325fdd4b5cf0be49b37d3b7b7c29070d">FLOW_LOG_INFO</a>(<span class="stringliteral">&quot;I can log right from the constructor and throughout *this lifetime!&quot;</span>);</div>
<div class="line">    <span class="comment">// ... other code ...</span></div>
<div class="line">  }</div>
<div class="line"> </div>
<div class="line"><span class="keyword">private</span>:</div>
<div class="line">  <span class="keywordtype">void</span> do_fun_stuff()</div>
<div class="line">  {</div>
<div class="line">    <span class="comment">// This macro works, because Log_context superclass defines get_logger() which returns m_logger,</span></div>
<div class="line">    <span class="comment">// and component() returns My_cool_components::S_FUN_HAVER.</span></div>
<div class="line">    <span class="comment">// But we need not ever worry about such details.</span></div>
<div class="line">    <a class="code hl_define" href="log_8hpp.html#a325fdd4b5cf0be49b37d3b7b7c29070d">FLOW_LOG_INFO</a>(<span class="stringliteral">&quot;I am about to do something cool and fun: &quot;</span> &lt;&lt; 42 &lt;&lt; <span class="stringliteral">&quot;!&quot;</span>);</div>
<div class="line">    <span class="comment">// ... more code ...</span></div>
<div class="line">  }</div>
<div class="line"> </div>
<div class="line">  <span class="comment">// I will use a simple stdout/stderr logger for my logging. It&#39;s passed to Log_context in constructor.</span></div>
<div class="line">  <a class="code hl_class" href="classflow_1_1log_1_1Simple__ostream__logger.html">flow::log::Simple_ostream_logger</a> <a class="code hl_variable" href="classflow_1_1log_1_1Log__context.html#af13297446a54d6d80eb33d8fc672c10f">m_logger</a>;</div>
<div class="line">}; <span class="comment">// class I_like_to_have_fun_and_log_about_it</span></div>
<div class="ttc" id="aclassflow_1_1log_1_1Log__context_html"><div class="ttname"><a href="classflow_1_1log_1_1Log__context.html">flow::log::Log_context</a></div><div class="ttdoc">Convenience class that simply stores a Logger and/or Component passed into a constructor; and returns...</div><div class="ttdef"><b>Definition:</b> <a href="log_8hpp_source.html#l01609">log.hpp:1610</a></div></div>
<div class="ttc" id="aclassflow_1_1log_1_1Log__context_html_af13297446a54d6d80eb33d8fc672c10f"><div class="ttname"><a href="classflow_1_1log_1_1Log__context.html#af13297446a54d6d80eb33d8fc672c10f">flow::log::Log_context::m_logger</a></div><div class="ttdeci">Logger * m_logger</div><div class="ttdoc">The held Logger pointer. Making the pointer itself non-const to allow operator=() to work.</div><div class="ttdef"><b>Definition:</b> <a href="log_8hpp_source.html#l01710">log.hpp:1710</a></div></div>
<div class="ttc" id="aclassflow_1_1log_1_1Simple__ostream__logger_html"><div class="ttname"><a href="classflow_1_1log_1_1Simple__ostream__logger.html">flow::log::Simple_ostream_logger</a></div><div class="ttdoc">An implementation of Logger that logs messages to the given ostreams (e.g., cout or an ofstream for a...</div><div class="ttdef"><b>Definition:</b> <a href="simple__ostream__logger_8hpp_source.html#l00083">simple_ostream_logger.hpp:85</a></div></div>
<div class="ttc" id="alog_8hpp_html_a325fdd4b5cf0be49b37d3b7b7c29070d"><div class="ttname"><a href="log_8hpp.html#a325fdd4b5cf0be49b37d3b7b7c29070d">FLOW_LOG_INFO</a></div><div class="ttdeci">#define FLOW_LOG_INFO(ARG_stream_fragment)</div><div class="ttdoc">Logs an INFO message into flow::log::Logger *get_logger() with flow::log::Component get_log_component...</div><div class="ttdef"><b>Definition:</b> <a href="log_8hpp_source.html#l00197">log.hpp:197</a></div></div>
<div class="ttc" id="anamespaceflow_1_1log_html_a5c602384e6fe9d7642740ac2fae4ad04"><div class="ttname"><a href="namespaceflow_1_1log.html#a5c602384e6fe9d7642740ac2fae4ad04">flow::log::Sev</a></div><div class="ttdeci">Sev</div><div class="ttdoc">Enumeration containing one of several message severity levels, ordered from highest to lowest.</div><div class="ttdef"><b>Definition:</b> <a href="log__fwd_8hpp_source.html#l00223">log_fwd.hpp:224</a></div></div>
<div class="ttc" id="anamespaceflow_1_1log_html_a5c602384e6fe9d7642740ac2fae4ad04ac238793326fae17afcc849e96b96e8e7"><div class="ttname"><a href="namespaceflow_1_1log.html#a5c602384e6fe9d7642740ac2fae4ad04ac238793326fae17afcc849e96b96e8e7">flow::log::Sev::S_INFO</a></div><div class="ttdeci">@ S_INFO</div><div class="ttdoc">Message indicates a not-&quot;bad&quot; condition that is not frequent enough to be of severity Sev::S_TRACE.</div></div>
<div class="ttc" id="anamespaceflow_html"><div class="ttname"><a href="namespaceflow.html">flow</a></div><div class="ttdoc">Catch-all namespace for the Flow project: A collection of various production-quality modules written ...</div><div class="ttdef"><b>Definition:</b> <a href="async__fwd_8hpp_source.html#l00074">async_fwd.hpp:75</a></div></div>
</div><!-- fragment --><p >Note that the <code><a class="el" href="classflow_1_1log_1_1Log__context.html#a5d628315d5a93908d47a281980d3113e" title="Assignment operator that behaves similarly to the copy constructor.">operator=()</a></code> allows one to change the underlying <a class="el" href="classflow_1_1log_1_1Logger.html" title="Interface that the user should implement, passing the implementing Logger into logging classes (Flow&#39;...">Logger</a> anytime after construction (e.g., <code>existing_log_context = Log_context(&amp;some_logger, Some_enum::S_SOME_COMPONENT);</code>).</p>
<h3>Implementation notes</h3>
<p >The code could be shorter by getting rid of non-copy constuctor in favor of direct member initialization by user; and by simply omitting the API for the auto-generated copy constructor and assignment. However, in this case, I wanted to clearly document the API; and since there are more than 1 constructors, it seemed better to explicitly declare them all instead of replacing some with implicitly required direct initialization (again to make API more clearly documented).</p>
<h3>Thread safety</h3>
<p >The only operation of interest w/r/t threads is the aforementioned implicit assignment operator. Thread safety is the same as for any <code>struct</code> with no locking done therein. </p>

<p class="definition">Definition at line <a class="el" href="log_8hpp_source.html#l01609">1609</a> of file <a class="el" href="log_8hpp_source.html">log.hpp</a>.</p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="ae7100d2dd130d8f130e3e64fdb1f4fd9" name="ae7100d2dd130d8f130e3e64fdb1f4fd9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae7100d2dd130d8f130e3e64fdb1f4fd9">&#9670;&nbsp;</a></span>Log_context() <span class="overload">[1/4]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">flow::log::Log_context::Log_context </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classflow_1_1log_1_1Logger.html">Logger</a> *&#160;</td>
          <td class="paramname"><em>logger</em> = <code>0</code></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">explicit</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Constructs <a class="el" href="classflow_1_1log_1_1Log__context.html" title="Convenience class that simply stores a Logger and/or Component passed into a constructor; and returns...">Log_context</a> by storing the given pointer to a <a class="el" href="classflow_1_1log_1_1Logger.html" title="Interface that the user should implement, passing the implementing Logger into logging classes (Flow&#39;...">Logger</a> and a null <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">logger</td><td>Pointer to store. Rationale for providing the null default: To facilitate subclass <code>= default</code> no-arg ctors. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="log_8cpp_source.html#l00188">188</a> of file <a class="el" href="log_8cpp_source.html">log.cpp</a>.</p>

</div>
</div>
<a id="af1ac7f30ab442c3c6aa6079335df6c9a" name="af1ac7f30ab442c3c6aa6079335df6c9a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af1ac7f30ab442c3c6aa6079335df6c9a">&#9670;&nbsp;</a></span>Log_context() <span class="overload">[2/4]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Component_payload &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">flow::log::Log_context::Log_context </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classflow_1_1log_1_1Logger.html">Logger</a> *&#160;</td>
          <td class="paramname"><em>logger</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Component_payload&#160;</td>
          <td class="paramname"><em>component_payload</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">explicit</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Constructs <a class="el" href="classflow_1_1log_1_1Log__context.html" title="Convenience class that simply stores a Logger and/or Component passed into a constructor; and returns...">Log_context</a> by storing the given pointer to a <a class="el" href="classflow_1_1log_1_1Logger.html" title="Interface that the user should implement, passing the implementing Logger into logging classes (Flow&#39;...">Logger</a> and a new <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a> storing the specified generically typed payload (an <code>enum</code> value). </p>
<p >For more background on <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a> see its doc header.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">Component_payload</td><td>See <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a> constructor doc header: <code>Payload</code> template arg specifically. </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">logger</td><td>Pointer to store. </td></tr>
    <tr><td class="paramname">component_payload</td><td>See <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a> constructor doc header: <code>payload</code> arg specifically. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="log_8hpp_source.html#l01749">1749</a> of file <a class="el" href="log_8hpp_source.html">log.hpp</a>.</p>

</div>
</div>
<a id="a5c57a7f44959a01ca9a1c948a6686cc0" name="a5c57a7f44959a01ca9a1c948a6686cc0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5c57a7f44959a01ca9a1c948a6686cc0">&#9670;&nbsp;</a></span>Log_context() <span class="overload">[3/4]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">flow::log::Log_context::Log_context </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classflow_1_1log_1_1Log__context.html">Log_context</a> &amp;&#160;</td>
          <td class="paramname"><em>src</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">explicit</span><span class="mlabel">default</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Copy constructor that stores equal <code>Logger*</code> and <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a> values as the source. </p>
<p >This is <code>explicit</code>, even though an unintentional copy (e.g., in a <code>bind</code> sans <code>cref</code> or <code>ref</code>) would just internally involve the copying a pointer (as of this writing). The reason is that it's unlikely one wants to blithely copy these objects or objects of a sub-type; most likely (at least in scenarios seen so far, as of this writing) a <code>cref</code> or <code>ref</code> is in order instead. (I am open to counter-examples and thus removing this <code>explicit</code> keyword if convinced by one.)</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">src</td><td>Source object. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a3d4e624833d96bdafa1485ffff472509" name="a3d4e624833d96bdafa1485ffff472509"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3d4e624833d96bdafa1485ffff472509">&#9670;&nbsp;</a></span>Log_context() <span class="overload">[4/4]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">flow::log::Log_context::Log_context </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classflow_1_1log_1_1Log__context.html">Log_context</a> &amp;&amp;&#160;</td>
          <td class="paramname"><em>src</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Move constructor that makes this equal to <code>src</code>, while the latter becomes as-if default-constructed. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">src</td><td>Source object. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="log_8cpp_source.html#l00196">196</a> of file <a class="el" href="log_8cpp_source.html">log.cpp</a>.</p>

<p class="reference">References <a class="el" href="classflow_1_1log_1_1Log__context.html#a5d628315d5a93908d47a281980d3113e">operator=()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1log_1_1Log__context_a3d4e624833d96bdafa1485ffff472509_cgraph.svg" width="344" height="47"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a8a5fef42dc2cedf3c0d1a6e83beb2948" name="a8a5fef42dc2cedf3c0d1a6e83beb2948"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8a5fef42dc2cedf3c0d1a6e83beb2948">&#9670;&nbsp;</a></span>get_log_component()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="classflow_1_1log_1_1Component.html">Component</a> &amp; flow::log::Log_context::get_log_component </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Returns reference to the stored <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a> object, particularly as many <code>FLOW_LOG_*()</code> macros expect. </p>
<dl class="section note"><dt>Note</dt><dd>It's public at least so that <a class="el" href="log_8hpp.html#ae4b5d4fdd2eb052615620879dd74af95" title="For the rest of the block within which this macro is instantiated, causes all FLOW_LOG_....">FLOW_LOG_SET_CONTEXT()</a> works in all reasonable contexts.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="log_8cpp_source.html#l00222">222</a> of file <a class="el" href="log_8cpp_source.html">log.cpp</a>.</p>

<p class="reference">References <a class="el" href="log_8hpp_source.html#l01712">m_component</a>.</p>

<p class="reference">Referenced by <a class="el" href="peer__socket_8cpp_source.html#l02892">flow::net_flow::Node::categorize_pkts_as_dropped_on_acks()</a>, <a class="el" href="checkpt__timer_8cpp_source.html#l00029">flow::perf::Checkpointing_timer::Checkpointing_timer()</a>, <a class="el" href="low__lvl__packet_8cpp_source.html#l00380">flow::net_flow::Low_lvl_packet::create_from_raw_data_packet()</a>, <a class="el" href="server__socket_8cpp_source.html#l00568">flow::net_flow::Node::handle_syn_ack_ack_to_syn_rcvd()</a>, <a class="el" href="peer__socket_8cpp_source.html#l03222">flow::net_flow::Node::log_accumulated_acks()</a>, <a class="el" href="peer__socket_8cpp_source.html#l01860">flow::net_flow::Node::log_rcv_window()</a>, <a class="el" href="peer__socket_8cpp_source.html#l03591">flow::net_flow::Node::log_snd_window()</a>, <a class="el" href="low__lvl__io_8cpp_source.html#l00491">flow::net_flow::Node::low_lvl_packet_sent()</a>, <a class="el" href="low__lvl__io_8cpp_source.html#l00416">flow::net_flow::Node::mark_data_packet_sent()</a>, <a class="el" href="x__thread__task__loop_8cpp_source.html#l00319">flow::async::Cross_thread_task_loop::schedule_from_now()</a>, <a class="el" href="segregated__thread__task__loop_8cpp_source.html#l00374">flow::async::Segregated_thread_task_loop::schedule_from_now_impl()</a>, <a class="el" href="low__lvl__packet_8cpp_source.html#l00130">flow::net_flow::Low_lvl_packet::serialize_to_raw_data_and_log()</a>, <a class="el" href="peer__socket_8cpp_source.html#l03737">flow::net_flow::Node::snd_flying_pkts_erase_one()</a>, <a class="el" href="peer__socket_8cpp_source.html#l03774">flow::net_flow::Node::snd_flying_pkts_push_one()</a>, and <a class="el" href="drop__timer_8cpp_source.html#l00347">flow::net_flow::Drop_timer::start_timer()</a>.</p>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1log_1_1Log__context_a8a5fef42dc2cedf3c0d1a6e83beb2948_icgraph.svg" width="1970" height="996"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="af4db395042b065b00398cd59845dcb4d" name="af4db395042b065b00398cd59845dcb4d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af4db395042b065b00398cd59845dcb4d">&#9670;&nbsp;</a></span>get_logger()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classflow_1_1log_1_1Logger.html">Logger</a> * flow::log::Log_context::get_logger </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Returns the stored <a class="el" href="classflow_1_1log_1_1Logger.html" title="Interface that the user should implement, passing the implementing Logger into logging classes (Flow&#39;...">Logger</a> pointer, particularly as many <code>FLOW_LOG_*()</code> macros expect. </p>
<dl class="section note"><dt>Note</dt><dd>It's public at least so that <a class="el" href="log_8hpp.html#ae4b5d4fdd2eb052615620879dd74af95" title="For the rest of the block within which this macro is instantiated, causes all FLOW_LOG_....">FLOW_LOG_SET_CONTEXT()</a> works in all reasonable contexts.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="log_8cpp_source.html#l00217">217</a> of file <a class="el" href="log_8cpp_source.html">log.cpp</a>.</p>

<p class="reference">References <a class="el" href="log_8hpp_source.html#l01710">m_logger</a>.</p>

<p class="reference">Referenced by <a class="el" href="peer__socket_8cpp_source.html#l05771">flow::net_flow::Node::async_low_lvl_ack_send()</a>, <a class="el" href="peer__socket_8cpp_source.html#l05756">flow::net_flow::Node::async_low_lvl_syn_ack_ack_send()</a>, <a class="el" href="low__lvl__io_8cpp_source.html#l00580">flow::net_flow::Node::async_no_sock_low_lvl_rst_send()</a>, <a class="el" href="asio_2node_8hpp_source.html#l00581">flow::net_flow::asio::Node::async_op()</a>, <a class="el" href="peer__socket_8cpp_source.html#l05321">flow::net_flow::Node::async_rcv_wnd_recovery()</a>, <a class="el" href="low__lvl__io_8cpp_source.html#l00988">flow::net_flow::Node::async_sock_low_lvl_rst_send()</a>, <a class="el" href="low__lvl__io_8cpp_source.html#l00249">flow::net_flow::Node::async_wait_latency_then_handle_incoming()</a>, <a class="el" href="peer__socket_8cpp_source.html#l04376">flow::net_flow::Node::cancel_timers()</a>, <a class="el" href="peer__socket_8cpp_source.html#l02892">flow::net_flow::Node::categorize_pkts_as_dropped_on_acks()</a>, <a class="el" href="peer__socket_8cpp_source.html#l05532">flow::net_flow::Node::close_abruptly()</a>, <a class="el" href="cfg__manager_8hpp_source.html#l01471">flow::cfg::Config_manager&lt; S_d_value_set &gt;::Config_manager()</a>, <a class="el" href="peer__socket_8cpp_source.html#l03907">flow::net_flow::Node::connect_with_metadata()</a>, <a class="el" href="peer__socket_8cpp_source.html#l03957">flow::net_flow::Node::connect_worker()</a>, <a class="el" href="checkpt__timer_8cpp_source.html#l00372">flow::perf::Checkpointing_timer::Aggregator::create_aggregated_result()</a>, <a class="el" href="peer__socket_8cpp_source.html#l05728">flow::net_flow::Node::create_syn()</a>, <a class="el" href="peer__socket_8cpp_source.html#l05743">flow::net_flow::Node::create_syn_ack()</a>, <a class="el" href="event__set_8cpp_source.html#l01271">flow::net_flow::Node::event_set_close()</a>, <a class="el" href="event__set_8cpp_source.html#l00879">flow::net_flow::Node::event_set_create()</a>, <a class="el" href="socket__buffer_8cpp_source.html#l00039">flow::net_flow::Socket_buffer::feed_buf_move()</a>, <a class="el" href="socket__buffer_8hpp_source.html#l00395">flow::net_flow::Socket_buffer::feed_bufs_copy()</a>, <a class="el" href="node_8cpp_source.html#l00426">flow::net_flow::Node::handle_incoming()</a>, <a class="el" href="low__lvl__io_8cpp_source.html#l00181">flow::net_flow::Node::handle_incoming_with_simulation()</a>, <a class="el" href="server__socket_8cpp_source.html#l00568">flow::net_flow::Node::handle_syn_ack_ack_to_syn_rcvd()</a>, <a class="el" href="server__socket_8cpp_source.html#l00430">flow::net_flow::Node::handle_syn_to_listening_server()</a>, <a class="el" href="server__socket_8cpp_source.html#l00141">flow::net_flow::Node::listen()</a>, <a class="el" href="peer__socket_8cpp_source.html#l03222">flow::net_flow::Node::log_accumulated_acks()</a>, <a class="el" href="peer__socket_8cpp_source.html#l01860">flow::net_flow::Node::log_rcv_window()</a>, <a class="el" href="peer__socket_8cpp_source.html#l03591">flow::net_flow::Node::log_snd_window()</a>, <a class="el" href="low__lvl__io_8cpp_source.html#l00491">flow::net_flow::Node::low_lvl_packet_sent()</a>, <a class="el" href="low__lvl__io_8cpp_source.html#l00416">flow::net_flow::Node::mark_data_packet_sent()</a>, <a class="el" href="node_8cpp_source.html#l01116">flow::net_flow::Node::perform_regular_infrequent_tasks()</a>, <a class="el" href="x__thread__task__loop_8cpp_source.html#l00277">flow::async::Cross_thread_task_loop::post()</a>, <a class="el" href="segregated__thread__task__loop_8cpp_source.html#l00360">flow::async::Segregated_thread_task_loop::post_impl()</a>, <a class="el" href="peer__socket_8cpp_source.html#l05402">flow::net_flow::Node::receive_wnd_recovery_data_received()</a>, <a class="el" href="x__thread__task__loop_8cpp_source.html#l00319">flow::async::Cross_thread_task_loop::schedule_from_now()</a>, <a class="el" href="segregated__thread__task__loop_8cpp_source.html#l00374">flow::async::Segregated_thread_task_loop::schedule_from_now_impl()</a>, <a class="el" href="segregated__thread__task__loop_8cpp_source.html#l00029">flow::async::Segregated_thread_task_loop::Segregated_thread_task_loop()</a>, <a class="el" href="peer__socket_8cpp_source.html#l04721">flow::net_flow::Node::send_worker()</a>, <a class="el" href="low__lvl__packet_8cpp_source.html#l00130">flow::net_flow::Low_lvl_packet::serialize_to_raw_data_and_log()</a>, <a class="el" href="node_8hpp_source.html#l04157">flow::net_flow::Node::serv_create_forward_plus_ctor_args()</a>, <a class="el" href="peer__socket_8cpp_source.html#l04257">flow::net_flow::Node::setup_connection_timers()</a>, <a class="el" href="peer__socket_8cpp_source.html#l04427">flow::net_flow::Node::setup_drop_timer()</a>, <a class="el" href="peer__socket_8cpp_source.html#l03737">flow::net_flow::Node::snd_flying_pkts_erase_one()</a>, <a class="el" href="peer__socket_8cpp_source.html#l03774">flow::net_flow::Node::snd_flying_pkts_push_one()</a>, <a class="el" href="node_8hpp_source.html#l04151">flow::net_flow::Node::sock_create_forward_plus_ctor_args()</a>, <a class="el" href="peer__socket_8cpp_source.html#l01305">flow::net_flow::Node::sock_data_to_reassembly_q_unless_overflow()</a>, <a class="el" href="peer__socket_8cpp_source.html#l06243">flow::net_flow::Node::sock_info()</a>, <a class="el" href="peer__socket_8cpp_source.html#l01229">flow::net_flow::Node::sock_track_new_data_after_gap_rexmit_off()</a>, <a class="el" href="segregated__thread__task__loop_8cpp_source.html#l00098">flow::async::Segregated_thread_task_loop::start()</a>, <a class="el" href="x__thread__task__loop_8cpp_source.html#l00081">flow::async::Cross_thread_task_loop::start()</a>, <a class="el" href="drop__timer_8cpp_source.html#l00347">flow::net_flow::Drop_timer::start_timer()</a>, <a class="el" href="low__lvl__io_8cpp_source.html#l00997">flow::net_flow::Node::sync_sock_low_lvl_rst_send()</a>, <a class="el" href="task__qing__thread_8cpp_source.html#l00037">flow::async::Task_qing_thread::Task_qing_thread()</a>, <a class="el" href="node_8cpp_source.html#l00113">flow::net_flow::Node::this_thread_init_logger_setup()</a>, and <a class="el" href="node_8cpp_source.html#l00151">flow::net_flow::Node::worker_run()</a>.</p>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1log_1_1Log__context_af4db395042b065b00398cd59845dcb4d_icgraph.svg" width="3007" height="3359"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a5d628315d5a93908d47a281980d3113e" name="a5d628315d5a93908d47a281980d3113e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5d628315d5a93908d47a281980d3113e">&#9670;&nbsp;</a></span>operator=() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classflow_1_1log_1_1Log__context.html">Log_context</a> &amp; flow::log::Log_context::operator= </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classflow_1_1log_1_1Log__context.html">Log_context</a> &amp;&#160;</td>
          <td class="paramname"><em>src</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">default</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Assignment operator that behaves similarly to the copy constructor. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">src</td><td>Source object. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>*this</code>. </dd></dl>

<p class="reference">Referenced by <a class="el" href="log_8cpp_source.html#l00196">Log_context()</a>.</p>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1log_1_1Log__context_a5d628315d5a93908d47a281980d3113e_icgraph.svg" width="344" height="47"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="aae857197aecba8606c32296bc7bec308" name="aae857197aecba8606c32296bc7bec308"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aae857197aecba8606c32296bc7bec308">&#9670;&nbsp;</a></span>operator=() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classflow_1_1log_1_1Log__context.html">Log_context</a> &amp; flow::log::Log_context::operator= </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classflow_1_1log_1_1Log__context.html">Log_context</a> &amp;&amp;&#160;</td>
          <td class="paramname"><em>src</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Move assignment operator that behaves similarly to the move constructor. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">src</td><td>Source object. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>*this</code>. </dd></dl>

<p class="definition">Definition at line <a class="el" href="log_8cpp_source.html#l00203">203</a> of file <a class="el" href="log_8cpp_source.html">log.cpp</a>.</p>

<p class="reference">References <a class="el" href="log_8hpp_source.html#l01712">m_component</a>, <a class="el" href="log_8hpp_source.html#l01710">m_logger</a>, <a class="el" href="log_8cpp_source.html#l00227">swap()</a>, and <a class="el" href="log_8cpp_source.html#l00235">flow::log::swap()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1log_1_1Log__context_aae857197aecba8606c32296bc7bec308_cgraph.svg" width="499" height="99"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="aa6bb8e4250586425631ef80063caf155" name="aa6bb8e4250586425631ef80063caf155"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa6bb8e4250586425631ef80063caf155">&#9670;&nbsp;</a></span>swap()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void flow::log::Log_context::swap </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classflow_1_1log_1_1Log__context.html">Log_context</a> &amp;&#160;</td>
          <td class="paramname"><em>other</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Swaps <a class="el" href="classflow_1_1log_1_1Logger.html" title="Interface that the user should implement, passing the implementing Logger into logging classes (Flow&#39;...">Logger</a> pointers and <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a> objects held by <code>*this</code> and <code>other</code>. </p>
<p >No-op if <code>this == &amp;other</code>.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">other</td><td>Other object. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="log_8cpp_source.html#l00227">227</a> of file <a class="el" href="log_8cpp_source.html">log.cpp</a>.</p>

<p class="reference">References <a class="el" href="log_8hpp_source.html#l01712">m_component</a>, <a class="el" href="log_8hpp_source.html#l01710">m_logger</a>, <a class="el" href="log_8cpp_source.html#l00227">swap()</a>, and <a class="el" href="log_8cpp_source.html#l00235">flow::log::swap()</a>.</p>

<p class="reference">Referenced by <a class="el" href="log_8cpp_source.html#l00203">operator=()</a>, <a class="el" href="log_8cpp_source.html#l00227">swap()</a>, and <a class="el" href="log_8cpp_source.html#l00235">flow::log::swap()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1log_1_1Log__context_aa6bb8e4250586425631ef80063caf155_cgraph.svg" width="308" height="71"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1log_1_1Log__context_aa6bb8e4250586425631ef80063caf155_icgraph.svg" width="499" height="71"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="acf51230f139ac6f17748a02111b04086" name="acf51230f139ac6f17748a02111b04086"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acf51230f139ac6f17748a02111b04086">&#9670;&nbsp;</a></span>m_component</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classflow_1_1log_1_1Component.html">Component</a> flow::log::Log_context::m_component</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>The held <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a> object. Making the object non-<code>const</code> to allow <code><a class="el" href="classflow_1_1log_1_1Log__context.html#a5d628315d5a93908d47a281980d3113e" title="Assignment operator that behaves similarly to the copy constructor.">operator=()</a></code> to work. </p>

<p class="definition">Definition at line <a class="el" href="log_8hpp_source.html#l01712">1712</a> of file <a class="el" href="log_8hpp_source.html">log.hpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="log_8cpp_source.html#l00222">get_log_component()</a>, <a class="el" href="log_8cpp_source.html#l00203">operator=()</a>, and <a class="el" href="log_8cpp_source.html#l00227">swap()</a>.</p>

</div>
</div>
<a id="af13297446a54d6d80eb33d8fc672c10f" name="af13297446a54d6d80eb33d8fc672c10f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af13297446a54d6d80eb33d8fc672c10f">&#9670;&nbsp;</a></span>m_logger</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classflow_1_1log_1_1Logger.html">Logger</a>* flow::log::Log_context::m_logger</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>The held <a class="el" href="classflow_1_1log_1_1Logger.html" title="Interface that the user should implement, passing the implementing Logger into logging classes (Flow&#39;...">Logger</a> pointer. Making the pointer itself non-<code>const</code> to allow <code><a class="el" href="classflow_1_1log_1_1Log__context.html#a5d628315d5a93908d47a281980d3113e" title="Assignment operator that behaves similarly to the copy constructor.">operator=()</a></code> to work. </p>

<p class="definition">Definition at line <a class="el" href="log_8hpp_source.html#l01710">1710</a> of file <a class="el" href="log_8hpp_source.html">log.hpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="log_8cpp_source.html#l00217">get_logger()</a>, <a class="el" href="log_8cpp_source.html#l00203">operator=()</a>, and <a class="el" href="log_8cpp_source.html#l00227">swap()</a>.</p>

</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>log/<a class="el" href="log_8hpp_source.html">log.hpp</a></li>
<li>log/<a class="el" href="log_8cpp_source.html">log.cpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Mar 28 2025 22:55:35 for Flow by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>
